class Student:
    cls = "QC3期"        # 类属性
    def __init__(self,name,age,address): # 初始化方法。魔术方法
        """
        self 表示对象本身
        :param name:实例属性
        :param age:实例属性
        :param address:实例属性
        """
        self.name = name        # 为了能够让整个类都可以找到它
        self.age = age
        self.address = address
    def get_age(self):      # 类方法，类里的方法，对象可以调用
        return self.age

if __name__ == '__main__':
    # 通过student类创建王振对象
    s1 = Student(name = "王振",age = 99,address='安徽芜湖')
    # 王振可以调用类方法
    # print(s1.get_age())

    # 类属性可以通过对象来调用
    print(s1.cls)

    # 类属性也可以通过类来调用
    print(Student.cls)

    # 修改类属性，通过类来修改
    Student.cls = 'QC2期'
    print(Student.cls)

    # 删除类属性
    """
    del Student.cls
    print(Student.cls)      # 会报错
    """

    # 修改实例属性，要通过对象来修改
    s1.name = "社会振"
    print(s1.name)      # 被修改掉
    s1.age = 101

    # 调用方法
    # print(s1.get_age())

    # 添加实例属性
    s1.sex = '女'
    print(s1.sex)

    # 查看对象所有的实例属性
    # print(s1.__dict__)       # {'name': '社会振', 'age': 101, 'address': '安徽芜湖', 'sex': '女'}

    # 查看类所有的属性和方法
    # print(Student.__dict__)

    # 如果类和对象拥有相同的属性名称
    # s1.cls = "啦啦啦"
    # print(s1.cls)
    print(s1.__dict__)  # {'name': '社会振', 'age': 101, 'address': '安徽芜湖', 'sex': '女', 'cls': '啦啦啦'}

    # 如果说对象没有这个属性名称，则会寻找类属性
    print(s1.cls)       # 对象本身拥有的属性 > 类拥有的属性

